package fabrica.parser;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class XMLBuilder {
	
	private static XMLBuilder instancia;
	private DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // formato de fecha con hora
	private DateFormat dfConMillis = new SimpleDateFormat("yyyyMMddHHmmssms"); // formato de fecha con hora y millis, todo junto
	
	private DocumentBuilderFactory factory;


	private XMLBuilder() {
		this.factory = DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
	}

	public static XMLBuilder getInstance() {
		if (instancia == null)
			return new XMLBuilder();
		return instancia;
	}

	
	//ConfirmarFabricacionXML
	public String ConfirmarFabricacionXML (List<String> solicitudes){
		try {
			DocumentBuilder builder = this.factory.newDocumentBuilder();
			Document doc = builder.newDocument();
			
			String fechaStringConMilis = dfConMillis.format(Calendar.getInstance().getTime());
			String fechaString = df.format(Calendar.getInstance().getTime());		
			
			File f = new File("C:\\IA_REPO\\Fabricacion-" + fechaStringConMilis + ".xml");
			
			if ((f != null)&&(solicitudes != null)){
				Element root = doc.createElement("Fabrica"); 

				
				Element fecha = doc.createElement("fecha");
				fecha.setTextContent(fechaString);
				root.appendChild(fecha);	
				
				Element solFs = doc.createElement("SolicitudesFabriacion");
				
				for(String idSol : solicitudes){
					Element sol = doc.createElement("idSolicitud");
					sol.setTextContent(idSol);
					solFs.appendChild(sol);
					
				}
				

				root.appendChild(solFs);
				doc.appendChild(root);
					
			}
			
			Transformer t = TransformerFactory.newInstance().newTransformer();
					
			t.setOutputProperty(OutputKeys.INDENT, "yes");
			t.setOutputProperty(OutputKeys.METHOD, "xml");
			
			//paso el XML a un archivo
			FileOutputStream  fos = new FileOutputStream(f);	
			t.transform(new DOMSource(doc), new StreamResult(fos));
			fos.close();
			
			//paso el XML a una variable String
			ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
			t.transform(new DOMSource(doc), new StreamResult(baos));
			String xmlRes = baos.toString();
			
			
			return xmlRes;
		} 
		catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}
